﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SIA.HwAccess
{
    public enum eDataType { NONE, S7BOOLEAN, S7BYTE, S7INT, S7WORD, S7DINT, S7DWORD, S7ANY };
    public enum eAreaType { NONE, DB, M, E, A, T, Z, PA, PE, RAW_READ, RAW_WRITE };


    /// <summary>Interfaccia per un indirizzo sisico</summary>
    public interface IHwAddress
    {
        void parse(string str);       // set del'indirizzo tramite una stringa (DB5.DBX0.0 BYTE 5)
        int DataBlock { get; }        // Area di memoria (DB)
        int StartByte { get; }        // offset (byte)
        int Bit { get; }              // bit (0..7)
        int LenByte { get; }          // dimensione (lunghezza in byte)
        eDataType DataType { get; }    // tipo di dato
        eAreaType AreaType { get; }    // tipo di dato    
        
        /// <summary>Chiave identificativa per un gruppo di indirizzi</summary>
        String DataKey { get; }

        /// <summary>Ritorna L'indirizzo in stringa</summary>
        String ToString();
        /// <summary>L'indirizzo è contenuto</summary>
        Boolean Contains(IHwAddress hwAddress);
        /// <summary>L'indirizzo è adiacente</summary>
        Boolean Adjacent(IHwAddress hwAddress);
        /// <summary>Unisce a this hwAddress</summary>
        void Merge(IHwAddress hwAddress);
    }
}
